package Creating_Observables

import (
	"fmt"
	"github.com/reactivex/rxgo/v2"
	"time"
)

// 创建一个冷的可以观察到的一个通道。
// 当观察者订阅时对象会被使用。

func Demo_FromChannel() {
	ch := make(chan rxgo.Item)
	go func() {
		for i := 0; i < 8; i++ {
			ch <- rxgo.Of(i)
		}

		close(ch)
	}()

	observable := rxgo.FromChannel(ch, rxgo.WithPublishStrategy())

	// 订阅 1
	// Create the first Observer
	observable.DoOnNext(func(i interface{}) {
		fmt.Printf("First observer: %d\n", i)
	})
	// 订阅 2
	// Create the second Observer
	observable.DoOnNext(func(i interface{}) {
		fmt.Printf("Second observer: %d\n", i)
	})

	observable.Connect()

	time.Sleep(time.Second * 3)
}
